package com.vpaliy.melophile.ui.view;

import android.content.Context;
import android.support.design.widget.AppBarLayout;
import android.support.design.widget.CoordinatorLayout;
import android.support.v7.widget.RecyclerView;
import android.util.AttributeSet;
import android.view.View;

public final class ScrollBehavior extends AppBarLayout.Behavior {

  private static final int TOP_CHILD_FLING_THRESHOLD = 3;
  private boolean isPositive;

  public ScrollBehavior() {
  }

  public ScrollBehavior(Context context, AttributeSet attrs) {
    super(context, attrs);
  }

  @Override
  public boolean onNestedFling(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target, float velocityX, float velocityY, boolean consumed) {
    if (velocityY > 0 && !isPositive || velocityY < 0 && isPositive) {
      velocityY = velocityY * -1;
    }
    if (target instanceof RecyclerView && velocityY < 0) {
      final RecyclerView recyclerView = (RecyclerView) target;
      final View firstChild = recyclerView.getChildAt(0);
      final int childAdapterPosition = recyclerView.getChildAdapterPosition(firstChild);
      consumed = childAdapterPosition > TOP_CHILD_FLING_THRESHOLD;
    }
    return super.onNestedFling(coordinatorLayout, child, target, velocityX, velocityY, consumed);
  }

  @Override
  public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target, int dx, int dy, int[] consumed) {
    isPositive = dy > 0;
    super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed);
  }
}